#ifndef _HASH_H_
#define _HASH_H_

#include "common.h"

#define HASH_SIZE 100
#define data_t UserInfo*
#define SYS_ERROR -1
#define SYS_OK  0
#define SYS_DEVICE_REINSERT 1
#define SYS_UPDATE_MAX_FD 2//更新select监听范围

//UserInfo 设备信息结构体
typedef struct UserInfo {
	int iFd; //客户端通讯描述符
	char strDevice[8];//保存上报的设备ID
	long lTime;//时间
}UserInfo;
//Node数据节点结构体
typedef struct Node {
	UserInfo data;//设备信息结构体
	struct Node* pNext;//链表指向下一个节点地址
}Node;
// Hash结构体
typedef struct Hash {
	struct Node* table[HASH_SIZE];//Hash表的索引表
}Hash;


//全局变量
extern Hash* g_pHash;
//创建Hash表
Hash* CreateHash();
//销毁Hash表
void DestroyHash(Hash* pHash);


// 向Hash表中插入数据
int InsertItem(Hash* pHash, data_t stInfo);



//Hash表删除数据
int DeleteItem(Hash* pHash, data_t tData);


//修改Hash表中的元素
int UpdateItem(Hash* pHash, data_t tData);
//根据设备ID返回设备的文件描述符
int FindFdFromHash(Hash* pHash, char* dev_id);
//在hash表中查找指定的设备信息
int FindDevice(Hash* pHash, data_t tData, int* pOldFd);
//显示Hash表信息
void ShowHash(Hash* pHash);
//从Hash表中删除超时的设备信息
int DeleteTimeOutDevFromHash(Hash* pHash, fd_set* pSet, int iMax);
#endif
